#include "abctableview.h"
#include "ui_abctableview.h"
#include "abcdialog.h"
#include "common/tdebug.h"
#include "ttableview.h"
#include "tlistview.h"
#include "abcdialog.h"
#include <QAbstractListModel>

ABCTableView::ABCTableView(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::ABCTableView)
{
    ui->setupUi(this);
    mABCDialog=new ABCDialog(this);

#ifdef STRABC
    connect(ui->bar,SIGNAL(ABCChanged(QString)),this,SLOT(updateDilog(QString)));
#else
    connect(ui->bar,SIGNAL(ABCChanged(char)),this,SLOT(updateDilog(char)));
#endif

    connect(ui->bar,SIGNAL(ABCTipStart()),this,SLOT(dialogShow()));
    connect(ui->bar,SIGNAL(ABCTipEnd()),this,SLOT(dialogHide()));
    //ui->listView->verticalScrollBar()->hide();

    mABCDialog->hide();

    mModel=NULL;
    ui->tableView->setScrollVaild(true);
    ui->tableView->verticalHeader()->hide();
    ui->tableView->horizontalHeader()->hide();

    //ui->tableView->horizontalHeader()->setDefaultSectionSize(ui->tableView->rect().width());
    ui->tableView->horizontalHeader()->setDefaultSectionSize(280);
}

void ABCTableView::setBarSize(int a, int b)
{
    ui->horizontalLayout->setStretch(0,a);
    ui->horizontalLayout->setStretch(1,b);
}

void ABCTableView::setBarEnable(bool b)
{
    if(b)
    {
        //ui->bar->show();
        ui->frame_2->show();
    }
    else
    {
        //ui->bar->hide();
        ui->frame_2->hide();
    }
}

TTableView * ABCTableView::getTableView()
{
   return ui->tableView;
}

void ABCTableView::setModel(QAbstractListModel *model,int num)
{

    mModel= model;
    ui->tableView->setModel(mModel);
    mCheckNum = num;
}

void ABCTableView::setCheckNum(int num)
{
    mCheckNum = num;
}

void ABCTableView::setABCDialogPos(int x, int y)
{
    mABCDialog->move(x,y);
}

#ifdef STRABC
int ABCTableView::getSelect(QString str)
{

    if(mModel==NULL)
    {
        mModel=(QAbstractListModel*)(ui->tableView->model());
    }
    for(int i=0;i<mModel->rowCount();i++)
    {
        //if(mModel->index(i).data(mCheckNum).toString().toUtf8().toUpper().at(0) >= str.toUtf8())
        //if(mModel->index(i).data(mCheckNum).toString().toUtf8().toUpper().left(1) >= str.toUtf8())
        if(mModel->index(i).data(mCheckNum).toString().at(0).toUpper() >= str.at(0))
        {
            return i;
        }
    }
    return -1;
}
#else
int ABCTableView::getSelect(char c)
{
    if(c<'A')c = 0;
    if(mModel==NULL)
    {
        mModel = (QAbstractListModel*)(ui->tableView->model());
    }
    for(int i=0;i<mModel->rowCount();i++)
    {

        if(mModel->index(i).data(mCheckNum).toString().at(0).toUpper().toLatin1()>=c)
        {
            return i;
        }
    }
    return -1;
}
#endif


void ABCTableView::setItemDelegate ( QAbstractItemDelegate * delegate )
{
    ui->tableView->setItemDelegate(delegate);
}

#ifdef STRABC
void ABCTableView::updateDilog(QString str)
{
//    QString str = ABCListViewBar::tr(ABCListViewBar::mChar[indx]);
//    char trs= str[0].toLatin1();

    mABCDialog->UpdateStr(str);
    mNowChar=str;

    int r=getSelect(str);
    QModelIndex ind=mModel->index(r);
    ui->tableView->setCurrentIndex(ind);
    ui->tableView->scrollTo(ind,QAbstractItemView::PositionAtTop);
    mABCDialog->repaint();
}
#else
void ABCTableView::updateDilog(char c)
{
    mABCDialog->UpdateChar(c);
    mNowChar=c;
    int r=getSelect(c);
    QModelIndex ind=mModel->index(r);
    ui->tableView->setCurrentIndex(ind);
    ui->tableView->scrollTo(ind,QAbstractItemView::PositionAtTop);
    mABCDialog->repaint();
}
#endif

void ABCTableView::dialogShow()
{
    int x = (width() - mABCDialog->width())/2;
    int y = (height() - mABCDialog->height())/2;
    mABCDialog->move(x,y);
    mABCDialog->show();
}
void ABCTableView::dialogHide()
{
    mABCDialog->hide();
}

ABCTableView::~ABCTableView()
{
    delete ui;
}
